package do1.common.util;

import do1.common.json.JSONArray;
import org.json.JSONException;
import do1.common.json.JSONObject;

public class JsonUtil
{
	static public JSONObject createJsonObject(String jsonString)
	{
		if(jsonString==null)
			return null;
		
		JSONObject jsonObject=null;
		try
		{
			jsonObject=new JSONObject(jsonString);
		}
		catch (JSONException e)
		{
			e.printStackTrace();
		}
		return jsonObject;
	}
	
	static public JSONObject createJsonObject(byte[] bytes)
	{
		if(bytes==null)
			return null;
		
		String jsonString=new String(bytes);
		return createJsonObject(jsonString);
	}
	
	public static boolean isObjectExists(JSONObject json,String key)
	{
		if(json==null)
			return false;
		
		return !json.isNull(key);
	}
	
	static public JSONObject getJsonObject(JSONArray json,int index)
	{
		if(json==null)
			return null;
		
		JSONObject obj=null;
		if(!json.isNull(index))
		{
			try
			{
				obj=json.getJSONObject(index);
			}
			catch (JSONException e)
			{
				e.printStackTrace();
			}
		}
		
		return obj;
	}
	
	static public JSONArray getJsonArray(JSONArray json,int index)
	{
		if(json==null)
			return null;
		
		JSONArray obj=null;
		if(!json.isNull(index))
		{
			try
			{
				obj=json.getJSONArray(index);
			}
			catch (JSONException e)
			{
				e.printStackTrace();
			}
		}
		
		return obj;
	}
	
	static public JSONObject getJsonObject(JSONObject json,String key)
	{
		if(json==null)
			return null;
		
		JSONObject obj=null;
		if(json.has(key))
		{
			try
			{
				obj=json.getJSONObject(key);
			}
			catch (JSONException e)
			{
				e.printStackTrace();
			}
		}
		
		return obj;
	}
	
	static public Object getObject(JSONObject json,String key)
	{
		if(json==null)
			return null;
		
		Object obj=null;
		if(json.has(key))
		{
			try
			{
				obj=json.get(key);
			}
			catch (JSONException e)
			{
				e.printStackTrace();
			}
		}
		
		return obj;
	}
	
	static public String getString(JSONObject json,String key)
	{
		if(json==null)
			return null;
		
		String obj=null;
		if(json.has(key))
		{
			try
			{
				obj=json.getString(key);
			}
			catch (JSONException e)
			{
				e.printStackTrace();
			}
		}
		
		return obj;
	}
	
	static public String getString(JSONObject json,String key,String defaultValue)
	{
		String str=getString(json,key);
		if(str==null)
		{
			str=defaultValue;
		}
		return str;
	}
	
	static public String getString(JSONArray json,int index)
	{
		if(json==null)
			return null;
		
		String obj=null;
		if(!json.isNull(index))
		{
			try
			{
				obj=json.getString(index);
			}
			catch (JSONException e)
			{
				e.printStackTrace();
			}
		}
		
		return obj;
	}
	
	static public int getInt(JSONArray json,int index,int defaultValue)
	{
		if(json==null || json.isNull(index))
			return defaultValue;
		
		try
		{
			defaultValue=json.getInt(index);
		}
		catch (JSONException e)
		{
			e.printStackTrace();
		}
		
		return defaultValue;
	}
	
	static public int getInt(JSONObject json,String key,int defaultValue)
	{
		if(json==null)
			return defaultValue;
		
		int obj=defaultValue;
		if(json.has(key))
		{
			try
			{
				obj=json.getInt(key);
			}
			catch (JSONException e)
			{
				e.printStackTrace();
			}
		}
		
		return obj;
	}
	
	static public JSONArray getJsonArray(JSONObject json,String key)
	{
		if(json==null)
			return null;
		
		JSONArray obj=null;
		if(json.has(key))
		{
			try
			{
				obj=json.getJSONArray(key);
			}
			catch (JSONException e)
			{
				e.printStackTrace();
			}
		}
		
		return obj;
	}
	
	/**
	 * @param json
	 * @param names
	 * @return
	 */
	static public JSONArray toJsonArray(JSONObject json,JSONArray names)
	{
		if(json==null)
			return null;
		
		JSONArray arr=null;
		try
		{
			arr=json.toJSONArray(names);
		}
		catch (JSONException e)
		{
			e.printStackTrace();
		}
		
		return arr;
	}
	
	public static void putToJsonObject(JSONObject json,String key,Object value)
	{
		try
		{
			json.put(key, value);
		}
		catch (JSONException e)
		{
			e.printStackTrace();
		}
	}
}
